In many industries, companies with different areas of expertise may collaborate with one another to develop a new product that combines the talents of each. For example, a company known for their design of uninterruptible power supplies for data centers may collaborate with another company known for their design of media system servers and controllers to provide a power management and protection solution for audio and/or video systems that integrates with the other company's media system servers and controllers. During the design phase of such a collaborative product, specifications reflecting the design, features, capabilities, etc. of the collaborative product are drafted, revised, and then finalized. Once the design is finalized, it becomes difficult to add new features or functionality to the product, or to correct design oversights, without impacting the schedule of the collaborative product.
One area of a collaborative product that is typically specified early on in the design process (and which all too frequently changes or evolves over time) is the user interface. For example, early on in the design process, the collaborating companies will need to agree upon how many buttons, keys, dials, display elements (e.g., display lines, status LEDs, buzzers, etc.) and other user accessible functional elements the collaborative product will have, and what their functionality will be. Thus, for example, if the collaborative product is to have only a single line display, and a single button, the companies will need to agree on what, if any message, is displayed to the user on the display when the product is powered on, what message is displayed to the user when, for example, the user presses the button once, what message is displayed if the button is pressed again, etc.
In a typical product, these messages (i.e., their content, their order, and typically their number) are stored or otherwise reflected in the firmware of the product, which, in a typical product design process, is frozen well in advance of production. This is unfortunate because this code freeze often occurs well prior to final verification testing where errors may be discovered, or where it may be determined that new or different functionality should be provided.